package com.allen.app.common;

import cn.hutool.core.convert.Convert;
import com.allen.app.common.domain.PageDomain;
import com.allen.app.common.domain.R;
import com.allen.app.common.utils.ServletContextUtil;
import com.allen.app.common.utils.SqlUtil;
import com.github.pagehelper.PageHelper;
import java.util.Objects;
import javax.servlet.http.HttpServletRequest;

/**
 * @description: BaseController
 * @author: Limiaojun
 * @create: 2019-03-21 16:36
 **/
public abstract class BaseController {

    protected <T> R<T> ok() {
        return R.ok();
    }

    protected <T> R<T> ok(T data) {
        return R.ok(data);
    }

    protected <T> R<T> error() {
        return R.error();
    }

    protected <T> R<T> error(T data) {
        R<T> error = R.error();
        error.setData(data);
        return error;
    }

    protected <T> R<T> result(Integer code, String message) {
        return R.ok().setCode(code).setMessage(message);
    }

    protected <T> R<T> result(Integer code, String message, T data) {
        R<T> result = R.ok().setCode(code).setMessage(message);
        result.setData(data);
        return result;
    }

    /**
     * 设置请求分页数据
     */
    protected void startPage()
    {
        PageDomain pageDomain = getPageDomain();
        Long page = pageDomain.getPage();
        Long rows = pageDomain.getRows();
        String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
        PageHelper.startPage(page.intValue(), rows.intValue(), orderBy);
    }

    /**
     * 封装分页对象
     */
    private PageDomain getPageDomain() {
        PageDomain pageDomain = new PageDomain();
        HttpServletRequest request = ServletContextUtil.getRequest();
        pageDomain.setPage(Convert.toLong(request.getParameter(PageDomain.PAGE)));
        pageDomain.setRows(Convert.toLong(request.getParameter(PageDomain.PAGE_ROWS)));
        pageDomain.setSidx(Convert.toStr(request.getParameter(PageDomain.PAGE_SIDX)));
        pageDomain.setSort(Convert.toStr(request.getParameter(PageDomain.PAGE_SORT)));

        // 默认最多查询 指定上限记录
        if (Objects.isNull(pageDomain.getPage())) {
            pageDomain.setPage(PageDomain.DEFAULT_PAGE);
            pageDomain.setRows(PageDomain.MAX_ROWS);
        }
        return pageDomain;
    }

}
